package pe.com.hermes.hermetic.web.controller.reportes;

import pe.com.hermes.hermetic.beans.AuditBean;
import pe.com.hermes.hermetic.negocio.service.HermeticFacade;
import pe.com.hermes.hermetic.negocio.ultil.ConstantesHermetic;
import pe.com.hermes.hermetic.negocio.ultil.Util;
import pe.com.hermes.hermetic.web.controller.base.IController;
import pe.com.hermes.hermetic.web.controller.general.MostrarReporteController;
import pe.com.hermes.hermetic.web.forms.HMF4014Form;

import java.util.ArrayList;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.log4j.Logger;


import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.SessionAttributes;


@RequestMapping("/mostrarHWF4014.html")
@Controller
@SessionAttributes(value={"form","codOpci","desOpci"})
public class GeneraciondeDatosController implements IController{

        private Logger logger = Logger.getLogger(this.getClass());
        
        @Autowired
        HermeticFacade servicioHermetic;
        
        @Autowired
        private MostrarReporteController reporteFactory;
        
        @RequestMapping(method=RequestMethod.GET)
        protected String showForm(ModelMap model, HttpServletRequest request, HttpServletResponse response) throws Exception {

            HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            List listaTransacciones = (List)session.getAttribute("listaMenu3");
            if (!Util.validaAccesoOpcion(listaTransacciones, ConstantesHermetic.REPORTE_GENERACION_DATOS)) {
                return FORM_ACCESS_NULL_VIEW;
            }

            //String cliente = (String)request.getSession().getAttribute("cliente");
            //String sucursal = (String)request.getSession().getAttribute("sucursal");

            HMF4014Form form = new HMF4014Form();
            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            
            try {
                Util utilidad = new Util();
                form.setFechadesde(utilidad.getFechaActual());
                form.setFechahasta(utilidad.getFechaActual());
                model.put(FORM_KEY,form); 
                AuditBean auditBean = new AuditBean(GENE_DATOS);
                servicioHermetic.inseAudit(auditBean);
            } catch (Exception e) {
                e.printStackTrace();
                logger.error("Error en el proceso. "+ e);
                return FORM_ERROR_VIEW;
            }        

            return FORM_GENERA_DATOS_VIEW;
        }

        @RequestMapping(params="accion=mostrarReporte")
        private String mostrarReporte (ModelMap model,@ModelAttribute(FORM_KEY) HMF4014Form form, HttpServletRequest request, HttpServletResponse response) throws Exception {    
        
            HttpSession session = request.getSession(false);        
            if (request.getSession().getAttribute("usuario") == null)
                return FORM_SESSION_FINISH;

            form.setControl(ConstantesHermetic.CTE_CONTROL_ACTIVO);
            String sucursal = request.getSession().getAttribute("sucursal").toString();
            String cliente =  request.getSession().getAttribute("cliente").toString();
            List listado = new ArrayList();
            
            try {

                if (form.getTipo().equals("E")) {
                    listado = 
                            servicioHermetic.getEnvio(form.getFechadesde(), 
                                                            form.getFechahasta(), 
                                                            sucursal,cliente);
                    model.put("variable", "E");
                }
                if (form.getTipo().equals("R")) {
                    listado = 
                            servicioHermetic.getRecojo(form.getFechadesde(), 
                                                             form.getFechahasta(), 
                                                             sucursal,cliente);
                    model.put("variable", "R");
                }
                if (listado != null) {
                    String Fechadesde = form.getFechadesde();
                    String Fechahasta = form.getFechahasta();
                    model.put("fechadesde", Fechadesde);
                    model.put("fechahasta", Fechahasta);
                    model.put("listadoDatos", listado);
                    System.out.println(listado.size());
                }
                model.put(FORM_KEY,form);  
            } catch (Exception e) {
                e.printStackTrace();
                //accionMapa = 0;
                return FORM_ERROR_VIEW;
            }
            
            response.addHeader("Content-type", "application/vnd.ms-excel");
            response.addHeader("Content-Disposition", "inline; filename=generacionDeDatos.xls");
            response.setContentType("Content-type: application/vnd.ms-excel");
                   
            response.setHeader("Cache-Control","cache"); // HTTP 1.1
            response.setHeader("Pragma","cache"); // HTTP 1.0
            response.setDateHeader ("Expires", -1);  
            return FORM_GENERA_DATOS_REPO;
        }


}
